package org.comple.erp.remote.warehouse;

import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.comple.erp.pojo.warehouse.Inventory;
import org.comple.erp.utils.AjaxResult;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 2025/11/11 15:57
 * author: 向远洋
 */
public interface InventoryRemote {
    /**
     * 查询仓库中商品的库存，默认查询所有仓库库存，可以提供参数按照map格式，以json形式
     * params中必填参数：companyCode：表示哪一个公司中的库存信息
     * params中可选参数：warehouseId: 表示哪一个仓库下的库存信息，默认为全部
     * @return stockList  - 库存信息
     */
    @PostMapping("/inventory/stock")
    public List<Inventory> getAllStock(@RequestBody Map<String, Object> params);

    /**
     * 通过goodsId + warehouseName库存中该商品的库存
     * goodsId保证唯一。warehouseName用来确认属于那个仓库
     * @return
     */
    @PostMapping("/inventory/goods")
    public Inventory getStockByGoodsId(@RequestParam("goodsId") String goodsId,
                                       @RequestParam("warehouseName") String warehouseName);

    /**
     * 初始化商品商品库存信息(期初信息)，如下是需要传入的字段
     * id, goodsId, goodsName, warehouseId, warehouseName,
     * totalNumber, cost, companyId, unitId, unitName
     * 1.该方法提供主要是在商品创建时候初始化商品库存信息，期初信息
     * 2.如果商品存在，则会修改商品成本和数量
     */
    @PostMapping("/inventory/init")
    public AjaxResult initGoodsStock(@RequestBody Map<String, Object> params);

    /**
     * 采购，销售审核通过时，修改锁定商品数量。等生成的入库出库单审核通过后，即可恢复锁定商品数量，同时扣减总库存
     * 该方法时用来修改锁定商品数量，该方法只能增加锁定数量
     * @return 返回一个String，如果时"5200"则表示修改成功，否则修改失败
     */
    @PostMapping("/inventory/upLockedNumber")
        public String upGoodsInventoryLockedNumber(@RequestParam("goodsId") String goodsId, @RequestParam("lockedNumber") Integer lockedNumber);

}
